package com.qixin.util.excel;

import org.apache.poi.hssf.usermodel.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.*;

import java.util.List;
import java.util.Map;

/**
 * 
 * @author 张子艺
 * @date 2017年4月10日 下午3:29:54
 * @version 1.0 // * @description Excel内容创建工具
 *
 */
public class ExcelContentUtil {
	/**
	 * 
	 * @author 张子艺
	 * @date 2017年4月10日 下午3:28:36
	 * @version 1.0
	 * @description 创建excel的标题
	 *
	 * @param excel
	 * @param sheet
	 * @param titleArray
	 */
	public static void createTitleRow(XSSFWorkbook excel, XSSFSheet sheet,
			String[] titleArray) {
		if (titleArray == null || titleArray.length == 0) {
			return;
		}
		XSSFRow titleRow = sheet.createRow(0);
		XSSFCellStyle titleStyle = ExcelStyleUtil.getCenterBoldStyle(excel);

		for (int i = 0; i < titleArray.length; i++) {
			XSSFCell titleCell = titleRow.createCell(i);
			titleCell.setCellStyle(titleStyle);
			titleCell.setCellValue(titleArray[i]);
		}
	}

	/**
	 * 
	 * @author 张子艺
	 * @date 2017年4月10日 下午3:41:47
	 * @version 1.0
	 * @description 创建内容行
	 *
	 * @param excel
	 * @param sheet
	 * @param rowNum
	 * @param contentArray
	 */
	public static void createContentRow(XSSFWorkbook excel, XSSFSheet sheet,
			int rowNum, String[] contentArray) {
		if (contentArray == null || contentArray.length == 0) {
			return;
		}
		XSSFRow row = sheet.createRow(rowNum);
		XSSFCellStyle style = ExcelStyleUtil.getLeftStyle(excel);

		for (int i = 0; i < contentArray.length; i++) {
			XSSFCell titleCell = row.createCell(i);
			titleCell.setCellStyle(style);
			titleCell.setCellValue(contentArray[i]);
		}
	}

	public static Workbook createWorkBook(List<Map<String, Object>> list,
			String[] keys, String columnNames[]) {
		// 创建excel工作簿
		HSSFWorkbook wb = new HSSFWorkbook();
		// 创建第一个sheet（页），并命名
		HSSFSheet sheet = wb.createSheet(list.get(0).get("sheetName")
				.toString());
		// 手动设置列宽。第一个参数表示要为第几列设；，第二个参数表示列的宽度，n为列高的像素数。
		for (int i = 0; i < keys.length; i++) {
			sheet.setColumnWidth((short) i, (short) (35.7 * 150));
		}

		// 创建第一行
		Row row = sheet.createRow((short) 0);

		// 创建两种单元格格式
		CellStyle cs = wb.createCellStyle();
		CellStyle cs2 = wb.createCellStyle();

		// 创建两种字体
		Font f = wb.createFont();
		Font f2 = wb.createFont();

		// 创建第一种字体样式（用于列名）
		f.setFontHeightInPoints((short) 10);
		f.setColor(IndexedColors.BLACK.getIndex());
		f.setBold(true);
		// 创建第二种字体样式（用于值）
		f2.setFontHeightInPoints((short) 10);
		f2.setColor(IndexedColors.BLACK.getIndex());

		// Font f3=wb.createFont();
		// f3.setFontHeightInPoints((short) 10);
		// f3.setColor(IndexedColors.RED.getIndex());

		// 设置第一种单元格的样式（用于列名）
		cs.setFont(f);
		cs.setBorderLeft(CellStyle.BORDER_THIN);
		cs.setBorderRight(CellStyle.BORDER_THIN);
		cs.setBorderTop(CellStyle.BORDER_THIN);
		cs.setBorderBottom(CellStyle.BORDER_THIN);
		cs.setAlignment(CellStyle.ALIGN_CENTER);

		// 设置第二种单元格的样式（用于值）
		cs2.setFont(f2);
		cs2.setBorderLeft(CellStyle.BORDER_THIN);
		cs2.setBorderRight(CellStyle.BORDER_THIN);
		cs2.setBorderTop(CellStyle.BORDER_THIN);
		cs2.setBorderBottom(CellStyle.BORDER_THIN);
		cs2.setAlignment(CellStyle.ALIGN_CENTER);
		cs2.setWrapText(true);
		// 设置列名
		for (int i = 0; i < columnNames.length; i++) {
			Cell cell = row.createCell(i);
			cell.setCellValue(columnNames[i]);
			cell.setCellStyle(cs);
		}
		// 设置每行每列的值
		for (short i = 1; i < list.size(); i++) {
			// Row 行,Cell 方格 , Row 和 Cell 都是从0开始计数的
			// 创建一行，在页sheet上
			HSSFRow row1 = sheet.createRow((short) i);
			// 在row行上创建一个方格
			for (short j = 0; j < keys.length; j++) {
				HSSFCell cell = row1.createCell(j);
				cell.setCellValue(new HSSFRichTextString(list.get(i).get(keys[j]) == null ? " " : list
						.get(i).get(keys[j]).toString()));
				cell.setCellStyle(cs2);
			}
		}
		return wb;
	}

}
